# 变量 存数据
# 函数 存代码
# 类  存函数，存变量 相同属性或者操作的 放在同一个类中

# class 类名称：
#      类 存储的东西

class Calc():
    # 在类中 创建的函数，叫做方法
    # 方法中，第一个参数，必须是 self
    # 并且 self 不用传参
    def add(self, a, b):
        print(a + b)


# 类的调用
t1 = Calc()  # 先调用类
t1.add(a=10, b=20)  # 再调用类里面的方法
t1.add(10, 30)


# 集成 ，拥有父类的所有东西
class Vip(Calc):  # Vip类，继承于 Calc 类
    # 对继承过来的方法，可以重写，重写 不会影响 父类
    def sub(self, a, b):
        print(a * b)

    def sub(self, a, b):
        print(a - b)


# 类的调用
t1 = Vip()
t1.add(10, 11)
t1.sub(20, 10)
t2 = Calc()
t2.add(a=10, b=20)


class Demo2:

    def t1(self):
        # 在方法中定义的变量，如果想要给其他方法使用
        # 那么 在定义变量时，在变量名前面 + self
        self.name = '张三'
        print(self.name)

    def t2(self):
        print('这是t2')
        print(self.name)


a1 = Demo2()
a1.t1()
a1.t2()


# self 是什么：
# self 谁去调用，self就是谁


class demo:

    def __init__(self, name, age):
        # 初始化方法，这个方法不需要调用，类被实例化时自动调用
        # 使用 __init__ 方法，可以使类 接收参数
        # 参数在调用类的时候，传递
        self.name = name
        self.age = age
        print('这是 __init__ 方法')

    def __del__(self):
        # 自动执行的，当实例化对象被销毁的时候
        print('啊，我被干掉了........')

    def hello(self):
        print('这是hello方法')
        print(f'接收的参数为{self.name}和{self.age}')


t1 = demo(name='张三', age=18)
t1.hello()


